package com.guojiang.guoaicodemother.core.parser;

import com.guojiang.guoaicodemother.exception.BusinessException;
import com.guojiang.guoaicodemother.exception.ErrorCode;
import com.guojiang.guoaicodemother.model.enums.CodeGenTypeEnum;

/**
 * 代码解析执行器（策略模式 + 执行器模式）
 */
public class CodeParserExecutor {

    /**
     * 将不同的代码解析器提前定义好，后续不需要再进行反复创建
     */
    private final static HtmlCodeParser htmlCodeParser = new HtmlCodeParser();

    private final static MultiFileCodeParser multiFileCodeParser = new MultiFileCodeParser();

    /**
     * 根据不同的代码生成类型，执行不同的代码解析器
     *
     * @param codeContent     代码内容
     * @param codeGenTypeEnum 代码生成类型
     * @return 解析结果（HtmlCodeResult 或 MultiFileCodeResult）
     */
    public static Object executeCodeParser(String codeContent, CodeGenTypeEnum codeGenTypeEnum) {
        return switch (codeGenTypeEnum) {
            /**
             * 根据不同的代码生成类型，选择不同策略的代码解析器进行解析，返回出结果
             */
            case HTML -> htmlCodeParser.parseCode(codeContent);
            case MULTI_FILE -> multiFileCodeParser.parseCode(codeContent);
            default ->
                    throw new BusinessException(ErrorCode.PARAMS_ERROR, "不支持的代码生成类型" + codeGenTypeEnum.getText());
        };
    }
}
